package demo29;

import java.util.ArrayList;
import java.util.List;

/**
 下面程序模拟卖票可能会出现两个问题：
    1.票卖重了
    2.还剩最后一张票时，好几个线程同时抢，出现-1张票
 出现上面两个问题主要是因为：
    1.remove()方法不是原子性的
    2.判断+操作不是原子性的
 */
public class TicketSeller1 {
    static List<String> tickets = new ArrayList<>();

    static {
        for (int i = 0; i < 10000; i++) {  //共一万张票
            tickets.add("票编号--" + i);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {   //共10个线程卖票
            new Thread(() -> {
                while (tickets.size() > 0) {  //判断余票
                    System.out.println("销售了..." + tickets.remove(0)); //操作减票
                }
            }).start();
        }
    }

}